import pandas as pd

# 定义一个函数来压缩序列，如果数值连续出现，则表示为 n*具体数值 的形式
def compress_sequence(series):
    """
    压缩给定的 Series，将连续相同的值表示为 "n*value" 的形式。
    
    参数:
    series (pandas.Series): 要压缩的 Series 数据。
    
    返回:
    list: 包含压缩后的字符串列表，每个字符串代表一组连续相同的值及其出现次数。
    """
    compressed = []
    # 使用 groupby 和 shift 来找到连续相同的值，并计算每个值的连续次数
    for _, group in series.groupby((series != series.shift()).cumsum()):
        value = group.iloc[0]  # 获取该组的第一个具体数值
        count = len(group)  # 计算当前分组中元素的数量
        compressed.append(f"{count}*{value}" if count > 1 else f"1*{value}")
    return compressed

# 加载 Excel 文件并选择相关的列名
file_path = r'D:\360MoveData\Users\10758\Desktop\first_code\000035\q1_result\allresult_spherical_minpoint1_maxlagNone_nlags1.xlsx'  # 请替换为你的实际文件路径
column_names = ['YOUNGMOD', 'POISSONR']  # 使用实际的列名

# 读取 Excel 文件，第一行自动作为列名
df = pd.read_excel(file_path)

# 分别处理指定的每一列，从第一行（索引为0）开始的数据
results = {}
for col_name in column_names:
    if col_name in df.columns:
        # 对非空值进行压缩处理，从第一行开始
        results[col_name] = compress_sequence(df[col_name].dropna())
    else:
        print(f"警告: 列 '{col_name}' 未找到。")

# 将结果写入文本文件，每行最多包含6个值
output_file = r'D:\360MoveData\Users\10758\Desktop\first_code\000035\q1_result\q1.txt'
with open(output_file, 'w', encoding='utf-8') as f:
    for col_name, compressed in results.items():
        f.write(f"{col_name}:\n")  # 写入列名作为标题
        # 每行写入最多6个值
        for i in range(0, len(compressed), 6):
            line = ' '.join(compressed[i:i + 6])  # 将6个值连接成一行
            f.write(f"{line}\n")
        f.write("\n")  # 在各列之间添加空行以提高可读性

